#!/bin/sh
## java env
# author: SheenDong
# date: 2020-04-07 22:37:10

API_NAME=$1
MODEL_CASE=$2
LOG_FILE=$3

JAR_NAME=$API_NAME\.jar
serviceName=$API_NAME
#PID  代表是PID文件
PID=$API_NAME\.pid

#使用说明，用来提示输入参数
usage() {
    echo "Usage: sh 执行脚本.sh [start|stop|restart|status]"
    exit 1
}

#检查程序是否在运行
is_exist(){
  pid=`ps -ef|grep $JAR_NAME|grep -v grep|awk '{print $2}' `
  #如果不存在返回1，存在返回0
  if [ -z "${pid}" ]; then
   return 1
  else
    return 0
  fi
}

#启动方法
start(){
  is_exist
  if [ $? -eq "0" ]; then
    echo ">>> ${JAR_NAME} is already running PID=${pid} <<<"
  else

    JVM_OPTS="-Djava.io.tmpdir=/tmp -XX:+UseParallelGC -Xms512m -Xmx512m"
    cp $API_NAME/target/$API_NAME.jar .publish

    if [[ "$LOG_FILE" == "log" ]]; then
      nohup java ${JVM_OPTS} -jar .publish/$serviceName.jar >/dev/null > /data/service/document/logs/platform/${serviceName}.log 2>&1 &
      echo $! > .publish/$PID
      echo ">>> $serviceName is starting up... <<<"
      sleep 3
      echo ">>> start $JAR_NAME successed(log) PID=$! <<<"
      tailf logs/${serviceName}.log
    else
      nohup java ${JVM_OPTS} -jar .publish/$serviceName.jar >/dev/null 2>&1 &
      echo $! > .publish/$PID
      echo ">>> $serviceName is starting up... <<<"
      sleep 3
      echo ">>> start $JAR_NAME successed PID=$! <<<"
    fi
  fi
}

#停止方法
stop(){

  if [[ "$(cat .publish/$PID)" == "" ]]; then
    echo ">>> service $serviceName already stopped <<<"
  else
    #is_exist
    pidf=$(cat .publish/$PID)
    #echo "$pidf"
    echo ">>> api PID = $pidf begin kill $pidf <<<"
    kill $pidf
    rm -rf .publish/$PID
    sleep 2
    is_exist
    if [ $? -eq "0" ]; then
      echo ">>> api 2 PID = $pid begin kill -9 $pidf  <<<"
      kill -9  $pidf
      sleep 2
      echo ">>> ${serviceName} process stopped <<<"
    else
      echo ">>> ${serviceName} is not running <<<"
    fi
  fi

}

#输出运行状态
status(){
  is_exist
  if [ $? -eq "0" ]; then
    echo ">>> ${JAR_NAME} is running PID is ${pid} <<<"
  else
    echo ">>> ${JAR_NAME} is not running <<<"
  fi
}

#重启
restart(){
  stop
  start
}

#根据输入参数，选择执行对应方法，不输入则执行使用说明
case "$2" in
  "start")
    start
    ;;
  "stop")
    stop
    ;;
  "status")
    status
    ;;
  "restart")
    restart
    ;;
  *)
    usage
    ;;
esac
exit 0